//
//  QSArchiverTool.swift
//  TestSwift
//
//  Created by Song on 2018/7/19.
//  Copyright © 2018年 Song. All rights reserved.
//
// 用于解归档的数据类型必须遵守NSCoding协议

import UIKit

class QSArchiverTool: NSObject {
    /// 归档数据
    ///
    /// - Parameters:
    ///   - data: 要归档的数据
    ///   - key: 归档数据的key
    ///   - filePath: 保存的文件路径
    class func qs_archiverData(data: Any, key: String, filePath: String) {
        let arcData = NSMutableData.init()
        // 申明一个归档处理对象
        let archiver = NSKeyedArchiver.init(forWritingWith: arcData)
        // 编码
        archiver.encode(data, forKey: key)
        // 编码结束
        archiver.finishEncoding()
        // 写入文件
        arcData.write(toFile: filePath, atomically: true)
    }
    
    /// 解归档数据
    ///
    /// - Parameters:
    ///   - datakey: 解归档数据的key
    ///   - filePath: 文件路径
    class func qs_unarchiver(datakey: String, filePath: String) -> Any? {
        // 声明文件管理器
        let fileManager = FileManager.init()
        // 判断文件是否存在
        if fileManager.fileExists(atPath: filePath) {
            // 读取数据
            let fileUrl = URL.init(fileURLWithPath: filePath)
            let data = try! Data.init(contentsOf: fileUrl)
            // 解码
            let unarchiver = NSKeyedUnarchiver.init(forReadingWith: data)
            let object = unarchiver.decodeObject(forKey: datakey)
            // 结束解码
            unarchiver.finishDecoding()
            
            return object
        }
        
        return nil
    }
}
